public class Solution {
    public int maxSubArray(int[] nums) {
//dp[i] 表示以i位置为结尾的最大连续子数组的和
// dp[i] 长度为1 nums[i-1] (注意下标映射)
// dp[i] 长度超过1， dp[i-1]+nums[i-1]
// dp[i]=Math.max(nums[i-1],dp[i-1]+nums[i-1])
        if(nums==null||nums.length==0){
            return 0;
        }
        int n=nums.length;
        int[] dp=new int[n+1];
        int ans = Integer.MIN_VALUE;
        for(int i=1;i<=n;i++){
            dp[i]=Math.max(nums[i-1],dp[i-1]+nums[i-1]);
            ans=Math.max(ans,dp[i]);
        }

        return ans;

    }
}